package br.com.citta.dao.impl;

import br.com.citta.business.entities.PlanoDespesa;
import br.com.citta.dao.PlanoDespesaDao;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class PlanoDespesaDaoImpl extends HibernateDaoSupport implements PlanoDespesaDao{
    
    public List<PlanoDespesa> findUnidades(String anoBase, String codUnidade){
        StringBuilder sb = new StringBuilder();
        sb.append("from PlanoDespesa where nivel = 2 and id.unidadeGestora.id.anoBase = ").append(anoBase);
        if (codUnidade != null && !codUnidade.equals("") && !codUnidade.equals("0")){
            sb.append(" and id.unidadeGestora.id.codigo = ").append(codUnidade);
        }
        sb.append(" order by id.codigo ");
        
        return getHibernateTemplate().find(sb.toString());
    }
    
    public List<PlanoDespesa> findElementosS(String anoBase, String codUnidade, String codigo){
        StringBuilder sb = new StringBuilder();
        sb.append("from PlanoDespesa where nivel = 7 and id.unidadeGestora.id.anoBase = ").append(anoBase);
        sb.append(" and codigo like '").append(codigo).append("%'");
        if (codUnidade != null && !codUnidade.equals("") && !codUnidade.equals("0")){
            sb.append(" and id.unidadeGestora = ").append(codUnidade);
        }
        sb.append(" order by id.codigo ");
        
        return getHibernateTemplate().find(sb.toString());
    }

    public List<PlanoDespesa> findElementosA(String anoBase, String codUnidade, String codigo, String nome){
        StringBuilder sb = new StringBuilder();
        sb.append("from PlanoDespesa where nivel = 7 and id.unidadeGestora.id.anoBase = ").append(anoBase);
        sb.append(" and id.codigo like '").append(codigo.substring(0,16)).append("%'");
        sb.append(" and nome = '").append(nome).append("'");
        if (codUnidade != null && !codUnidade.equals("") && !codUnidade.equals("0")){
            sb.append(" and id.unidadeGestora = ").append(codUnidade);
        }
        sb.append(" order by id.codigo ");
        
        return getHibernateTemplate().find(sb.toString());
    }
    
    public List<PlanoDespesa> findElementos(String anoBase, String codUnidade, String codigo){
        return findElementosAnalitico(anoBase, codUnidade, codigo, null);
    }
    
    public List<PlanoDespesa> findElementosAnalitico(String anoBase, String codUnidade, String codigo, String nome){
        StringBuilder sb = new StringBuilder();
        sb.append("from PlanoDespesa where id.unidadeGestora.id.anoBase = ").append(anoBase);
        sb.append(" and tipoConta = 'A'");
        if (nome != null && !nome.equals("")){
            sb.append(" and nome = '").append(nome).append("'");
            sb.append(" and id.codigo like '").append(codigo.substring(0, 4)).append("%'");
        } else {
            sb.append(" and id.codigo like '").append(codigo).append("%'");
        }
        if (codUnidade != null && !codUnidade.equals("") && !codUnidade.equals("0")){
            sb.append(" and id.unidadeGestora = ").append(codUnidade);
        }
        sb.append(" order by id.codigo ");
        
        return getHibernateTemplate().find(sb.toString());
    }

}
